package com.yu.juctest;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
//这是一个集齐7龙珠，许愿的案例
public class CyclicBarrierDemo {
    //这里设置8是因为子线程有7条，还有一条主线程
    static CyclicBarrier cyclicBarrier = new CyclicBarrier(8, new Runnable() {
        @Override
        public void run() { //两个参数创建的cyclicBarrier对象，在线程齐了之后会优先执行第二个参数的runnable
            System.out.println("集齐了龙珠，先去找神龙");
        }
    });


    public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
        for (int i = 1; i <=7 ; i++) {
            new Thread(() -> {
                try {
                    System.out.println(Thread.currentThread().getName() + "已经达到屏障，开始等待");
                    cyclicBarrier.await();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }, "第" + i+"颗").start();
        }
        cyclicBarrier.await();
        System.out.println("神龙找到，开始许愿");
    }

}
